from django_filters import rest_framework as filters # 可能不支持逻辑或运算
from home.models import AxfOrder
from order.order_status_constant import *


class OrderFilter(filters.FilterSet): # 自定义过滤器类。详细注释参考market/GoodsFilters.py中GoodsFilter类
    class Meta:
        model=AxfOrder
        fields=['o_status']
    o_status=filters.CharFilter(field_name='o_status',method='filter_order_status') # 等号左面的o_status是以GET请求传入的参数的名是在vue中定义好的。field_name是这个自定义字段关联的模型中的字段名(过滤器不是从数据库查询数据，而是针对queryset)。method是自定义查询方法名。

    def filter_order_status(self,queryset,name,value): # 自定义查询方法。前两个参数是固定写法，name是自定义的查询字段名，value是自定义的查询字段的要查的值，返回查询结果集(queryset)，URL中传name和value的值
        # value的值是在vue中定义好的，打开浏览器console，点我的页右侧的全部订单按钮，再点待付款，此时console中打印了返回值，点最右侧的OrderList.vue:106，在第80、88、98行分别判断了msg的值，并给o_status赋值(not_pay对应待付款页、not_send对应待收货页、默认值all对应全部页)。再将o_status的值以GET请求传给服务端
        if value=='not_pay':
            queryset=queryset.filter(o_status=ORDER_STATUS_NOT_PAY) # 订单状态常量在当前文件夹中order_status_constant.py中
        elif value=='not_send':
            queryset=queryset.filter(o_status=ORDER_STATUS_NOT_SEND)
        return queryset